home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / smaltalk.lha / smalltalk-1.1.1 / FileStream.st < prev    next >
Text File  |  1991-09-12  |  3KB  |  150 lines

  1. "======================================================================
  2. |
  3. |   FileStream Method Definitions
  4. |
  5.  ======================================================================"
  6.  
  7.  
  8. "======================================================================
  9. |
  10. | Copyright (C) 1990, 1991 Free Software Foundation, Inc.
  11. | Written by Steve Byrne.
  12. |
  13. | This file is part of GNU Smalltalk.
  14. |
  15. | GNU Smalltalk is free software; you can redistribute it and/or modify it
  16. | under the terms of the GNU General Public License as published by the Free
  17. | Software Foundation; either version 1, or (at your option) any later version.
  18. | GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
  19. | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  20. | FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  21. | details.
  22. | You should have received a copy of the GNU General Public License along with
  23. | GNU Smalltalk; see the file COPYING.  If not, write to the Free Software
  24. | Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  
  25. |
  26.  ======================================================================"
  27.  
  28.  
  29. "
  30. |     Change Log
  31. | ============================================================================
  32. | Author       Date       Change 
  33. | sbyrne     19 May 90      Rewrite contents to take advantage of the new
  34. |              FileStream>>size method.
  35. |
  36. | sbyrne     19 Dec 89      added fileIn: and primitive file in.
  37. |
  38. | sbyrne     21 May 89      created.
  39. |
  40. "
  41.  
  42. ReadWriteStream subclass: #FileStream
  43.         instanceVariableNames: 'file name'
  44.         classVariableNames: ''
  45.         poolDictionaries: ''
  46.         category: nil.
  47.  
  48. FileStream comment: 
  49. 'My instances are what conventional programmers think of as files.
  50. My instance creation methods accept the name of a disk file (or any named
  51. file object, such as /dev/rmt0 on UNIX or MTA0: on VMS).' !
  52.  
  53.  
  54. !FileStream class methodsFor: 'basic'!
  55.  
  56. open: fileName mode: fileMode
  57.     | file |
  58.     file _ FileStream new.
  59.     file fileOp: 0 with: fileName with: fileMode.
  60.     ^file
  61. !
  62.  
  63. popen: commandName dir: direction
  64.     | file |
  65.     file _ FileStream new.
  66.     file fileOp: 7 with: commandName with: direction.
  67.     ^file
  68. !
  69.  
  70. fileIn: aFileName
  71.     | fileStream |
  72.     fileStream _ self open: aFileName mode: 'r'.
  73.     fileStream fileIn.
  74.     fileStream close
  75. !!
  76.  
  77. !FileStream methodsFor: 'basic'!
  78.  
  79. close
  80.     self fileOp: 1
  81. !
  82.  
  83. next
  84.     ^self fileOp: 2
  85. !
  86.  
  87. nextPut: aChar
  88.     self fileOp: 3 with: aChar
  89. !
  90.  
  91. position: bytePosition
  92.     self fileOp: 4 with: bytePosition
  93.  
  94. position
  95.     ^self fileOp: 5
  96. !
  97.  
  98. contents
  99.     | str size |            "this is a ### HACK"
  100.     size _ self size.
  101.     str _ String new: size.
  102.     1 to: size do:
  103.     [ :i | str at: i put: (self next) ].
  104.     ^str
  105. !
  106.  
  107. size
  108.     "Return the current size of the file, in bytes"
  109.     ^self fileOp: 8
  110.  
  111. !!
  112.  
  113.  
  114.  
  115. !FileStream methodsFor: 'overriding inherited methods'!
  116.  
  117. reset
  118.     self position: 0
  119. !
  120.  
  121. setToEnd
  122.     self position: self size
  123. !
  124.  
  125. skip: anInteger
  126.     | pos |
  127.     pos _ ((self position + anInteger) max: 0) min: self size - 1.
  128.     self position: pos
  129. !
  130.  
  131. reverseContents
  132.     ^(ReadStream on: self contents) reverseContents
  133. !
  134.  
  135. isEmpty
  136.     ^self size == 0
  137. !!
  138.  
  139.  
  140. !FileStream methodsFor: 'testing'!
  141.  
  142. atEnd
  143.     ^self fileOp: 6
  144.  
  145.  
  146. !!
  147.